#include <cstdio>
#include <cassert>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;
int read(){
	char c=getchar();int x=0;
	while(c<48||c>57) c=getchar();
	do x=x*10+(c^48),c=getchar();
	while(c>=48&&c<=57);
	return x;
}
typedef long long ll;
const int N=303,T=603,M=200003,INF=0x3f3f3f3f;
const ll lINF=0x3f3f3f3f3f3f3f3f;
int n,m,q;
int f[N][N];
template<typename T>
inline void chmn(T &x,T v){if(x>v) x=v;}
int hd[T],ver[M],nxt[M],val[M],tot=1;bool cap[M];
void add(int u,int v,int w){
	nxt[++tot]=hd[u];hd[u]=tot;ver[tot]=v;cap[tot]=1;val[tot]=w;
	nxt[++tot]=hd[v];hd[v]=tot;ver[tot]=u;cap[tot]=0;val[tot]=-w;
}
ll h[T],dis[T];int cur[T];
struct cmp{
	bool operator()(const int a,const int b){
		return dis[a]>dis[b];
	}
};
typedef __gnu_pbds::priority_queue<int,cmp,__gnu_pbds::pairing_heap_tag> pque;
pque que;
pque::point_iterator its[T];
bool dij(){
	for(int i=0;i<=2*n+1;++i){
		if(dis[i]!=lINF) h[i]+=dis[i],dis[i]=lINF;
		cur[i]=hd[i];
	}
	dis[0]=0;
	its[0]=que.push(0);
	while(!que.empty()){
		int u=que.top();que.pop();
		for(int i=hd[u];i;i=nxt[i])
			if(cap[i]){
				int v=ver[i];
				ll w=val[i]+h[u]-h[v];
				assert(w>=0);
				if(dis[v]>dis[u]+w){
					bool fl=dis[v]==lINF;
					dis[v]=dis[u]+w;
					if(fl) its[v]=que.push(v);
					else que.modify(its[v],v);
				}
			}
	}
	return dis[2*n+1]!=lINF;
}
ll res;
ll arr[N];int sz;
bool stk[T];
bool dfs(int u){
	if(u==2*n+1) return 1;
	if(stk[u]) return 0;
	stk[u]=1;
	for(int i=cur[u];i;i=nxt[i]){
		cur[u]=i;
		if(cap[i]){
			int v=ver[i];
			ll w=val[i]+h[u]-h[v];
			if(dis[v]!=dis[u]+w) continue;
			if(dfs(v)){
				res+=val[i];
				cap[i]=0;
				cap[i^1]=1;
				stk[u]=0;
				return 1;
			}
		}
	}
	stk[u]=0;
	return 0;
}
int main(){
	freopen("journey.in","r",stdin);
	freopen("journey.out","w",stdout);
	n=read();m=read();q=read();
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j) if(i!=j) f[i][j]=INF;
	for(int i=1;i<=m;++i){
		int u=read(),v=read(),w=read();
		chmn(f[u][v],w);
	}
	for(int k=1;k<=n;++k)
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j) chmn(f[i][j],f[i][k]+f[k][j]);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(i!=j&&f[i][j]!=INF) add(i,j+n,f[i][j]);
	for(int i=1;i<=n;++i) add(0,i,0),add(i+n,2*n+1,0);
	while(dij()){dfs(0);arr[++sz]=res;}
	while(q--){
		int c=read();
		ll res=lINF;
		for(int i=0;i<=sz;++i) chmn(res,(ll)c*(n-i)+arr[i]);
		printf("%lld\n",res);
	}
	return 0;
}
